/**
 * @ClassName LC27
 * 给你一个数组 nums 和一个值 val，你需要 原地 移除所有数值等于 val 的元素，并返回移除后数组的新长度。
 * <p>
 * 不要使用额外的数组空间，你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
 * <p>
 * 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
 * @Author ykx
 * @Date 2024/3/1 14:46
 * @Version 1.0
 */
public class LC27 {
    public static void main(String[] args) {
        int[] nums = {0, 1, 2, 2, 3, 0, 4, 2};
        removeElement(nums, 2);

    }

    public static int removeElement(int[] nums, int val) {
        // 先遍历数组中的所有元素，并删除val
        int count = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == val) {
                nums[i] = -1;
            } else {
                count++;
            }
        }

        // 原地修改数组
        if (count < nums.length) {
            for (int i = 0; i < nums.length; i++) {
                if (i >= count) {
                    break;
                }
                // 说明当前位置是被删除的元素
                if (nums[i] == -1) {
                    for (int j = i + 1; j < nums.length; j++) {
                        if (nums[j] != -1) {
                            int temp = nums[j];
                            nums[j] = nums[i];
                            nums[i] = temp;
                            break;
                        }
                    }
                }
            }
        }
        return count;
    }
}
